package cn.demoncat.util.pdf.itextpdf.entity;

import cn.demoncat.util.lang.LocalDateUtil;
import cn.demoncat.util.lang.constant.StringConstant;
import cn.demoncat.util.pdf.PdfUtil;
import cn.demoncat.util.web.ServletUtil;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;

/**
 * PDF参数（转换HTML为PDF）
 * 
 * @author 延晓磊
 *
 * @since 2020年6月5日
 */
public class PdfParam {

	/**
	 * HTML文本
	 * 
	 * 场景：通过FrameMarker模板生成HTML
	 * 注意：输出A4纸PDF，尺寸为595x842；自动边框偏移、段落换行；尺寸设置过宽的页面右部分会贴边隐藏
	 */
	private String html;
	
	/**
	 * 输出流
	 */
	private OutputStream out;
	
	/**
	 * 水印文字，空表示无水印
	 */
	private String water;
	
	/**
	 * 水印角度：1 < 0 > -1
	 */
	private float waterAngle = 0;
	
	/**
	 * HTML源码中的根路径（相对路径的css、img的根地址）
	 */
	private String baseUrl;
	
	/**
	 * 是否需要页码
	 * 
	 * 0 不需要
	 * 1 数字页码
	 * 2 中文页码
	 */
	private int pager = 0;
	
	/**
	 * 总页数（生成后获取）
	 */
	private int pageCount = 0;

	/**
	 * PDF参数
	 * 
	 * @param html		HTML文本
	 * @param out		输出流
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public static PdfParam build(String html, OutputStream out) {
		PdfParam param = new PdfParam();
		param.setHtml(html);
		param.setOut(out);
		return param;
	}
	
	/**
	 * PDF参数
	 * 
	 * 注意：WEB下载完成后须返回null或void，避免SpringMvc二次输出响应
	 * 
	 * @param html		HTML文本
	 * @param response
	 * @param name		文档名称，如果有扩展名则必须是.pdf
	 * @param type		是否匹配MIME类型
	 * 
	 * @return out
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月4日
	 */
	public static PdfParam build(String html, HttpServletResponse response, String name, boolean type) {
		// 输出文件
		if (StringUtils.isBlank(name)) {
			name = LocalDateUtil.toDateStr();
		}
		if (!name.contains(StringConstant.POINT)) {
			name = name + PdfUtil.PDF_EXTENSION;
		}
		// 输出流
		return build(html, ServletUtil.getDownloadOut(response, name, type));
	}
	
	/**
	 * 变更输出流
	 * 
	 * @param out		
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public PdfParam out(OutputStream out) {
		this.out = out;
		return this;
	}
	
	/**
	 * 添加页码
	 * 
	 * @param isChinese	是否为中文页码
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public PdfParam addPager(boolean isChinese) {
		if (isChinese) {
			this.pager = 2;
		}else {
			this.pager = 1;
		}
		return this;
	}
	
	/**
	 * 添加水印
	 * 
	 * @param text	水印文字
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public PdfParam addWater(String text) {
		this.water = text;
		return this;
	}
	
	/**
	 * 添加水印
	 * 
	 * @param text	水印文字
	 * @param angle	水印角度：1 < 0 > -1
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public PdfParam addWater(String text, float angle) {
		this.water = text;
		this.waterAngle = angle;
		return this;
	}
	
	/**
	 * 添加HTML源码中的根路径（相对路径的css、img的根地址）
	 * 
	 * @param baseUrl
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月5日
	 */
	public PdfParam addBaseUrl(String baseUrl) {
		this.baseUrl = baseUrl;
		return this;
	}
	
	public String getHtml() {
		return html;
	}

	public void setHtml(String html) {
		this.html = html;
	}

	public OutputStream getOut() {
		return out;
	}

	public void setOut(OutputStream out) {
		this.out = out;
	}

	public String getWater() {
		return water;
	}

	public void setWater(String water) {
		this.water = water;
	}

	public String getBaseUrl() {
		return baseUrl;
	}

	public void setBaseUrl(String baseUrl) {
		this.baseUrl = baseUrl;
	}

	public int getPager() {
		return pager;
	}

	public void setPager(int pager) {
		this.pager = pager;
	}

	public float getWaterAngle() {
		return waterAngle;
	}

	public void setWaterAngle(float waterAngle) {
		this.waterAngle = waterAngle;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}
	
}
